package com.hainiu.cat.interview.chain;

import org.apache.commons.chain.Context;
import org.apache.commons.chain.impl.ChainBase;
import org.apache.commons.chain.impl.ContextBase;

/**
 * create by biji.zhao on 2021/7/20
 */
public class CommondChain extends ChainBase {
    public CommondChain() {
        super();
        // 向chain中添加Command节点
        addCommand(new GetUserInfo());
        addCommand(new TestDriver());
        addCommand(new NegotiateSale());
        addCommand(new ArrangeFinancing());
        addCommand(new CloseSale());
    }

    public static void main(String[] args) {
        CommondChain commondChain = new CommondChain();
        Context context = new ContextBase();

        try {
            // 依次调用当前chain中的所有command,直到结束,或者抛出异常,或者某个command返回true
            // command抛出的异常将会被捕获,并交给Chain中的Filter处理
            // 如果Filter未能处理,异常将会被重新抛出.需要提醒,Chain中可以包括Filter组件,Filter的执行顺序为倒序.
            commondChain.execute(context);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
